\documentclass[a4paper,12pt]{article}
\usepackage[MeX]{polski}
\usepackage{color}
\usepackage{alltt}
\usepackage[utf8x]{inputenc}
\usepackage{graphicx}
\usepackage{graphics}
\usepackage{epsf}
\usepackage{amsthm,amsmath,amsfonts,amssymb}
\usepackage{array} 
\author{Marta Truszczyńska, Marcin Dembowski}
\title{Aproksymacja funkcji za pomocą reguł rozmytych}

\newtheorem{tw}{Twierdzenie}[section]
\theoremstyle{definition}
\newtheorem{defi}[tw]{Definicja}

\frenchspacing
\begin{document}
\maketitle
\begin{abstract}
Niniejsza praca poświęcona jest zagadnieniu uczenia się aproksymacji funkcji, które jest jednym z podstawowych rodzajów indukcyjnego uczenia maszynowego.

Program oraz niniejsza dokumentacja dostępna jest do ściągnięcia na stronie
http://code.google.com/p/trudemall/
\end{abstract}
\clearpage
\tableofcontents

\newpage

\section{Streszczenie}
Niniejsza praca opisuje zagadnienie metody aproksymacji funkcji za pomocą aproksymatora rozmytego, reprezentowanego przez bazę reguł rozmytych. W opisywanym zagadnieniu zakładamy, iż funkcja jest nieznaną funkcją $f$ rzeczywistą zależną od $n$ zmiennych. Wykorzystujemy również zbiór trenujący. W oparciu o informacje uzyskane z próbki uczącej tworzymy rozmyty aproksymator, który tworzy nam aproksymację funkcji $f$.  W użytej przez nas metodzie najpierw dzielimy dziedzinę na pewną ilość zbiorów rozmytych. Następnie szukamy przynależności dla wartości ze zbioru trenującego do zbiorów rozmytych, które wyznaczyliśmy we wcześniejszym kroku oraz tworzymy funkcje przynależności. Na podstawie tych informacji generujemy rozmyte reguły. W kolejnym kroku przyporządkowujemy każdej wygenerowanej rozmytej regule współczynniki. Współczynniki te będą nam potrzebne do wyznaczania najlepszych reguł dla danych wartości. Następnie tworzymy bazę najlepszych rozmytych reguł, która jest naszym rozmytym aproksymatorem. Stworzony w ten sposób rozmyty aproksymator jest w stanie przybliżać nam szukaną funkcję. W pracy tej jest zaprezentowane użycie powyższej metody aprokcymacji dla dwóch różnych funkcji zależnych od dwóch zmiennych. Wyniki jakie uzyskano pokazują, iż można używać aproksymatora rozmytego do przybliżania wartości funkcji oraz że jest to dość uniwersalna metoda do aproksymacji dowolnej funkcji rzeczywistej zależnej od $n$ zmiennych.

\newpage

\section{Wprowadzenie do tematyki aproksymacji funkcji za pomocą reguł rozmytych}
Jedną z metod aproksymacji funkcji jest metoda uczenia się poprzez generację reguł rozmytych. Metoda ta polega na stworzeniu bazy reguł rozmytych, które znajdują rozwiązanie postawionego problemu, jakim może być przykładowo aproksymacja funkcji.  Metoda ta jest efektywna oraz uniwersalna - można ją zastosować kiedy model matematyczny jest nieliniowy, a nawet kiedy w ogólnie nie istnieje i nie jest możliwe skonstruowanie go dla danego zagadnienia. Ponadto metoda generowania reguł rozmytych pozwala znaleźć rozwiązanie dla zagadnień różnego typu, ponieważ dla każdego zagadnienia tworzy odpowiednie, dopasowane do danych uczących. Metoda ta, ze względu na swoją uniwersalność opisaną powyżej, może mieć wiele zastosowań. W niniejszej pracy zostanie pokazanie jej działanie na przykładzie zagadnienia aproksymacji funkcji. Lecz jej zastosowań może byc znacznie więcej - interesujące zagadnienia zaprezentowali Wang oraz Mendel w swojej pracy \cite{wang}. Są tam opisane między innymi rozwiązania problemów kontroli nad ciężarówką oraz przybliżania chaotycznego szeregu czasowego Mackey-Glass, za pomocą reguł rozmytych. Innym przykładem zastosowania reguł rozmytych został zaprezentowany w pracy \cite{fengwang} omawiającą rozpoznawanie tablicy rejestracyjnej samochodu. My postanowiliśmy użyć metody generowania reguł rozmytych, gdyż można ją zastosować do aproksymacji dowolnej nieznanej funkcji rzeczywistej zależnej od $n$ zmiennych.
Jak powyżej zostało wspomniane, opis algorytmu i metodyki generacji reguł rozmytych możemy znaleźć w pracy \cite{wang}. Znaleźć ją możemy także w książce \cite{rutk}, z której dowiadujemu się więcej o systemach rozmytych, a także o powiązaniach tej dziedziny z sieciami neuronowymi.
\par
Metodologia generowania reguł rozmytych zastosowana przez nas opiera się na algorytmie opisanym we wspomnianej powyżej pracy \cite{wang} oraz książce \cite{rutk}. Problem jaki chcemy rozwiązać to  aproksymacjia funkcji za pomocą aproksymatora rozmytego, reprezentowanego przez bazę reguł rozmytych. W opisywanym zagadnieniu zakładamy, iż funkcja 
\begin{center}
$f : \mathbb{R}^n \longrightarrow \mathbb{R}$
\end{center}
jest nieznaną funkcją rzeczywistą zależną od $n$ zmiennych. Wykorzystujemy również zbiór trenujący postaci: 
\begin{center}
$x^{(1)}$, $y^{(1)}$ \\
... \\
$x^{(m)}$, $y^{(m)}$ \\
\end{center}
gdzie $x^{(i)}=(x^{(i)}_{1},x^{(i)}_{2},...,x^{(i)}_{n})$ i są danymi wejściowymi , a $y^{(i)}=f(x^{(i)}$, $i=1,...,m$ jest wartością wyjściową. \\
Główną ideą naszej metodyki jest wygenerowanie reguł rozmytych z numerycznych par danych wejściowych, następnie zebranie ich i stworzenie bazy reguł rozmytych oraz ostatecznie stworzenie sterownika opartego o tą bazę reguł rozmytych. Aby osiągnąć powyższe cele zastosujemy algorytm, składający się z następujących pięciu kroków. W pierwszym kroku wyznaczamy dziedzinę dla każdej pary danych wejściowych i wartości wyjściowej, po czym dzielimy tą dziedzinę na obszary. Następnie przypisujemy do każdego obszaru funkcję przynależności. Używamy tutaj trójkątnych funkcji przynależności (lecz oczywiście można tez użyć innych typów funkcji przynależności\footnote{Informacje o funkcjach przynależności można znaleźć w pracy \cite{ross} oraz \cite{rutkowski}}). Drugim krokiem naszego algorytmu jest tworzenie reguł rozmytych w oparciu o informacje uzyskane z próbki uczącej. Polega to na określeniu stopni przynależności danych pary wejściowych i wartości wyjściowej do odpowiednich obszarów wyznaczonych w pierwszym kroku. Docelowo konkretną wartość zaliczamy do obszaru o najwyższym stopniu przynależności. W trzecim kroku przyporządkowujemy stopnie prawdziwości regułom z drugiego kroku. Jest to konieczne, ponieważ kiedy każda para danych generuje swoją regułę, to jest bardzo prawdopodobne, że są konflikty między którąś z tych reguł. Ponadto metoda ta redukuje ilość reguł. W kolejnym, czwartym kroku tworzymy bazę rozmytych reguł. Polega to na zapełnieniu tablicy, wcześniej stworzonymi regułami. W tym kroku możemy również włączyć do bazy reguł rozmytych numerycznych par danych wejściowych, reguły lingwistyczne (przykładowo stworzone przez eksperta z dziedziny tego zagadnienia). Piątym, ostatnim krokiem jest wyostrzanie (ang. defuzzifiaction). W kroku tym wyznaczamy wartość wyjściową $\bar y$ z pary danych wejściowych $(x_{1},x_{2})$. W tym celu najpierw wyliczamy stopień aktywności reguły po czym używając jednej z metod wyostrzania wyliczamy punkt zwrotny. 
\par

\begin{figure}[hbt]
\centering
\includegraphics[width=10cm]{obrazki/OriginalA.jpg}
\caption{Wykres funkcji \ref{f1}}
\label{originalA}
\end{figure}

\begin{figure}[hbt]
\centering
\includegraphics[width=10cm]{obrazki/OriginalB.jpg}
\caption{Wykres funkcji \ref{f2}}
\label{originalB}
\end{figure}

\begin{figure}[hbt]
\centering
\includegraphics[width=10cm]{obrazki/wf1.png}
\caption{Aproksymacja funkcji \ref{f1}}
\label{wf1}
\end{figure}

\begin{figure}[hbt]
\centering
\includegraphics[width=10cm]{obrazki/wf2.png}
\caption{Aproksymacja funkcji \ref{f2}}
\label{wf2}
\end{figure}

Zastosowanie powyższej metodologii pozwoliło nam stworzyć rozmyty aproksymator, reprezentowany przez bazę rozmytych reguł. Aproksymator ten umożliwił nam rozwiązanie naszego problemu jakim jest aproksymacja funkcji rzeczywistej zależnej od $n$ zmiennych. W naszych badaniach dokonaliśmy aproksymacji następujących funkcji:
\begin{equation}
\label{f1}
f_{1}(x_{1},x_{2})=(1 + \frac{1}{x_{1}^{2}} + \frac{1}{x_{2}^{1.5}})^{2}, 1 \leq x_{1},x_{2} \leq 5
\end{equation}

\begin{equation}
\label{f2}
f_{2}\left(x_{1},x_{2}\right) = 
\end{equation}
\begin{eqnarray*}
0.1x_{1}+0.05\left(x_{1}+x_{2}\right)^{2}+3\left(1-x_{1}\right)^{2}e^{-x_{1}^{2}}-\left(x_{2}+1\right)^{2} \\
- 10\left(\frac{x_{1}}{5}-x_{1}^{3}-x_{2}^{5}\right)e^{-x_{1}^{2}-x_{2}^{2}}-\frac{1}{3}e^{-\left(x_{1}+1\right)^{2}-x_{2}^{2}}, -4 \leq x_{1},x_{2} \leq 6
\end{eqnarray*}


Wyniki aproksymacji metodą generowania reguł prezentujemy za pomocą wykresów. Dla dużej liczby danych uczących otrzymujemy dobre wyniki, znacząco przypominające funkcję aproksymowaną. Przykłady takich wykresów wynikowych można zobaczyć na rysunkach \ref{wf1} oraz \ref{wf2}, które odnoszą się odpowiednio do funkcji \ref{f1} oraz funkcji \ref{f2}. Uzyskane wyniki pokazują, że za pomocą aproksymatora rozmytego można aproksymować różne funkcje rzeczywiste. W zależności od tego ile będziemy mieli danych uczących, jakiej jakości one będą oraz w jaki sposób zostały pozyskane, wyniki aproksymacji będą się różniły. Im większa była liczba prób uczących , tym lepsze uzyskaliśmy wyniki. Wyniki też różnią się od tego jak ustawiliśmy parametry początkowe oraz jakiej metody wyostrzania użyliśmy. Dokładniejszy opis wyników znajduje się w sekcji \ref{wyniki}. W dalszej części pracy, w sekcji \ref{metod} została dokładniej omówiona zastosowana metodologia. Jest tam opisany użyty algorytm oraz istota naszego rozwiązania problemu aproksymacji za pomocą rozmytych reguł. Po sekcji z opisem metodologii umieściliśmy uzyskane z jej implementacji wyniki (sekcja \ref{wyniki}). Następnie w sekcji \ref{konkluzje} znajdują się podsumowania oraz wnioski z naszych badań. Na końcu pracy można znaleźć bibliografię, w której zostały spisane prace z których korzystaliśmy w naszych badaniach.  

\newpage
\section{Metodologia generowania reguł rozmytych}
\label{metod} 
Zastosowany w pracy algorytm jest oparty na zaproponowanym przez Wanga oraz Mendela algorytmie generowania reguł rozmytych z danych numerycznych \cite{wang}.Zaproponowana tam metodologia pozwala na stworzenie systemu reguł rozmytych, który jest uniwersalnym aproksymatorem. Ponadto przedstawione podejście pozwala na połączenie wygenerowanych z danych numerycznych reguł rozmytych z modelem lingwistycznym. Taki model lingwistyczny może być na przykład stworzony przez eksperta z danej dziedziny. Połączenie reguł rozmytych z modelem lingwistycznym, pozwala na stworzenie bazy wiedzy, która staje się sterownikiem i umożliwia znalezienie rozwiązania danego zagadnienia. Poniżej zostanie przedstawiona użyta metodologia, a następnie jej zastosowanie do rozwiązania naszego problemu, jakim jest aproksymacja funckji rzeczywistej.    

\subsection{Algorytm tworzenia systemu rozmytego}
Zakładamy, iż posiadamy potrzebne dane postaci: dwa wejścia i jedno wyjście, z których chcemy utworzyć bazę reguł rozmytych. Dane te, będą naszymi danymi uczącymi i możemy je zapisać w postaci trójek:
\begin{center}
\[x^{(1)}_1, x^{(1)}_2, y^{(1)} \]
... \\
\[x^{(m)}_1, x^{(m)}_2, y^{(m)} \]
\end{center}
gdzie $x^{(i)}_1$ i $x^{(i)}_2$ są danymi wejściowymi , a $y^{(i)}=f(x^{(i)}_1,x^{(i)}_2)$, jest wartością wyjściową dla $i=1,...,m$. \\
Naszym celem jest wygenerowanie z tych danych uczących reguł rozmytych, które wyznaczą nam przypisanie $f : (x_1,x_2) \longrightarrow y$. 
\par
Pierwszym krokiem w algorytmie generowania reguł rozmytych jest wyznaczenie dziedziny dla wartości danych wejściowych i dla wartości wyjściowej. Zakładamy, że przedziały wartości $x_{1},x_{2}$ oraz $y$, wyglądają następująco:  
$[x_{1,min},x_{1,max}], [x_{2,min},x_{2,max}]$, oraz odpowiednio $[y_{min},y_{max}]$. Dzielimy każdy z utworzonych w ten sposób przedziałów na $2N+1$ obszarów. Przyporządkowujemy każdemu obszarowi rozmytą funkcję przynależności. Używamy trójkątnych funkcji przynależności (oczywiście może użyć też funkcji przynależności innego typu), które możemy opisać wzorem:
\begin{equation}
\mu_{A}(x) = 
\begin{cases}
\frac{x-a}{b-a} \mbox{ jeżeli } a \leq x \leq b \\
\frac{c-x}{c-b} \mbox{ jeżeli } b \leq x \leq c \\
0 \mbox{ w przeciwnym przypadku} 
\end{cases}
\end{equation}
\par
Następnym krokiem jest generowanie reguł rozmytych z danych uczących. Wyznaczamy stopnie przynależności dla danych wartości $x^{(i)}_{1},x^{(i)}_{2}$ oraz $y_{i}$ w poszczególnych obszarach. Następnie przyporządkowujemy dane wartości $x^{(i)}_{1},x^{(i)}_{2}$ oraz $y_{i}$ do obszaru z największym stopniem przynależności. Powyższe działania doprowadzają nas do otrzymania reguł. Z każdej pary danych wejściowych i wartości wyjściowej otrzymujemy jedną regułę.  
\par
Trzecim krokiem algorytmu jest przyporządkowywanie stopni prawdziwości każdej wygenerowanej wcześniej regule. Jako, ze każda reguł generuje oddzielną regułę, to jest duża możliwość, że część tych reguł tworzy sprzeczny zbiór reguł (konflikt). Sposobem na ich rozwiązanie jest przypisanie stopnia prawdziwości. Następnie z grupy w której są konflikty, wybieramy jedynie regułę, która ma najwyższą wartość stopnia prawdziwości. Metoda ta nie tylko rozwiązuje liczbę konfliktów, lecz też redukuje liczbę reguł. Istnieje też możliwość, aby najlepsze reguły były wybierane w inny sposób, na przykład przez eksperta z danej dziedziny. 
\par
Kolejnym krokiem jest stworzenie bazy rozmytych reguł. Baza taka jest tabelą wypełnioną regułami rozmytymi. Etykiety kolumn i wierszy tej tabeli odpowiadają wartościom rozmytym danych wejściowych, na które podzieliliśmy je w kroku pierwszym. Przykład bazy reguł dla zagadnienia aproksymacji funkcji, można zobaczyc na rysunku \ref{baza}.
\par
Ostatnim krokiem algorytmu generowania reguł rozmytych jest wyostrzanie. Szukamy odwzorowania $f : (x_{1},x_{2}) \longrightarrow y$, $y$ jest tutaj wartością zwracaną przez nasz rozmyty sterownik. Wyostrzanie ma nam naleźć właśnie to odwzorowanie, które z danych wejściowych $(x_{1},x_{2})$ pozwala na otrzymanie $y$. Stopień aktywności k-tej reguły oznaczamy przez:
\begin{equation}
 \alpha^{(k)} = \mu_{A^{j}}(x_{1}) \cdot \mu_{B^{j}}(x_{2})
\end{equation} 
gdzie $A^{j}$ dla $j = 1,...,j_{max}$ są zbiorami rozmytymi pokrywającymi zakres zmienności wartości $x_{1}$, a $B^{k}$ dla $k = 1,...,k_{max}$ są zbiorami rozmytymi pokrywającymi zakres zmienności wartości $x_{2}$. \\
Wartość $y$ wyznaczamy korzystając z jednej z metod wyostrzania. Przykładem takiej metody jest metoda CAD (ang. \textit{Center Avarge Defuzzification}) gdzie $y$ wyznacza się ze wzoru: 
\begin{equation}
y = \frac{\sum_{k=1}^{N} \alpha^{(k)} y^{(k)}}{\sum_{k=1}^{(N} \alpha^{(k)}}
\end{equation} 
Opisany powyżej algorytm generuje rozmyty system, który może pełnić rolę uniwersalnego aproksymatora, co zostało udowodnione w pracy  \cite{wang}.

\begin{figure}[hbt]
\centering
\includegraphics[width=10cm]{obrazki/baza.png}
\caption{Przykładowa baza reguł rozmytych}
\label{baza}
\end{figure}
%%%%%%%% METODOLOGIA ROZMYTEGO STEROWNIKA %%%%%%%%%%%%%%
\subsection{Zastosowanie metodologii rozmytego sterownika do implementacji algorytmu aproksymacji funkcji}
Do implementacji algorytmów wykorzystana została platforma .NET Framework 4.0 i język C\#. Platforma ta zosała użyta ze względu na prostotę implementacji algorytmu. W tej podsekcji przedstawiony zostanie sposób implementacji algorytmu w programie.

\subsubsection{Implementacja}
Głównym elementem programu jest klasa $FuzzyController$, w której zaimplementowany jest cały mechanizm rozmytego sterownika. W konstruktorze podajemy funkcję, która poddawana jest eksperymentom wraz z krańcami dziedziny funkcji oraz liczbą zbiorów którymi należy pokryć dziedzinę funkcji. Nic nie stoi na przeszkodzie, aby wskazać sterownikowi inną funkcję oraz inne parametry dziedziny.
\par
Sama baza reguł rozmytych przechowywana jest w dwuwymiarowej tablicy. Tablica ta, na przecięciu kolumny i wiersza (przesłanki) przechowuje regułę rozmytą. Reguły te powstają przy wywołaniu funkcji uczących się, a dokładniej funkcji $Learn(x1,x2)$. Dzięki temu możemy w dowolny sposób na zewnątrz sterownika zdecydować na jakich wartościach nasz sterownik ma się uczyć. Wyostrzanie odbywa się za pomocą funkcji $Sharpen(x1,x2)$, która zwraca wartość wyostrzoną sterownika, bądź $null$, jeżeli nie znaleziono reguł dla podanych punktów. Sama funkcja zależnie od wskazanej metody wyostrzania($SharpeningFunction$) wywołuje jedną z metod wyostrzania: $CenterOfGravity$ lub $CenterAverageDefuzzification$. Całkowanie użyte w pierwszej metodzie zaimplementowane zostało za pomocą numerycznego przybliżania metodą prostokątów. 
\begin{figure}[htb!]
\centering%
\includegraphics[height=3cm]{obrazki/calkowanie.png}
\caption{Całkowanie obszaru metodą numeryczną}
\label{fig:FigureExample}
\end{figure}

Krok całkowania można zmieniać i ustalać w parametrze $IntegralStep$.

%%%%%%%% ROZSZERZENIA I USPRAWNIENIA %%%%%%%%%%%%%%%%%%%
\subsection{Rozszerzenia i usprawnienia}
\subsubsection{Miary jakości}
\label{miary}
W celu lepszej analizy otrzymanych wyników, rozszerzyliśmy naszą implementację systemu rozmytego o miary jakości. 
W analizie danych bardzo ważną rolę odgrywa statystyka - pozwala nam numerycznie opisywać uzyskane wyniki. Do statystycznego opisu dokładności aproksymacji możemy użyć:
\begin{itemize} 
\item Odchylenie medianowe (ang. mean absolute deviation) - oznaczamy często jako MAD. Odchylenie to daje nam informacje o ogólnej dokładności przybliżenia. Wyraża się je wzorem:
\begin{equation}
\label{MAD}
MAD = \frac{1}{n} \sum_{i=1}^n |X _{i} - \bar X|
\end{equation} 
\item Odchylenie kwadratowe  (ang. mean square deviation) - oznaczamy jako MSD. Podobnie jak odchylenie medianowe, daje nam wiadomości o ogólnej dokładności przybliżenia. Wyraża się je wzorem:
\begin{equation}
\label{MSD}
MSD = \frac{1}{n} \sum_{i=1}^n (X _{i} - \bar X)^{2}
\end{equation}
\item Maksymalne odchylenie - oznaczyliśmy jako MD. Zwraca nam ono wartość największej odległości między punktem z oryginalnej funkcji, a punktem funkcji przybliżonej. Wyliczamy je z następującego wzoru:
\begin{equation}
\label{MD}
MD = \max_{i=1,\dots,n} |X _{i} - \bar X|
\end{equation}
\end{itemize} 
Więcej informacji na temat statystycznych metod opisu danych możemy znaleźć w książce \cite{makridakis}. \\
Powyżej opisane miary pozwalają nam porównywać wyniki, oraz oceniać ich jakość. Im mniejsze wartość są przez nie zwracane tym lepszą aproksymację otrzymujemy. 
\subsubsection{Metody wyostrzania}
\label{defuzz}
Rozszerzyliśmy również nasz system o dodatkową metodę wyostrzania, aby można było porównać ich działanie i wyniki. Metodę którą dodaliśmy jest COG (ang. \textit{Center Of Gravity}).
W metodzie tej oblicza się wartość odciętej współrzędnych środka ciężkości powierzchni zawartej pod wykresem funkcji przynależności $\mu_{A}$. Wzór na wyostrzanie ta metodą, w przypadku dyskretnej funkcji przynależności, wygląda następująco:

\begin{equation}
y = \frac{\sum_{i=1}^{N} \mu_{A} (y_{i})\cdot y_{i}}{\sum_{i=1}^{(N} \mu_{A} (y_{i})}
\end{equation} 
 
\newpage
\section{Eksperymenty numeryczne i ich wyniki}
\label{wyniki} 
\subsection{Eksperymenty numeryczne}


\begin{figure}[hbt]
\centering
\includegraphics[width=14cm]{obrazki/f1k10r.png}
\caption{Wykresy dla aproksymacji funkcji \ref{f1} oraz jego różnic z orginalną funckją}
\label{f1k10r}
\end{figure}

\begin{figure}[hbt]
\centering
\includegraphics[width=14cm]{obrazki/tabelaF1k.png}
\caption{Tabela wartości k i miar jakości dla aproksymacji funkcji \ref{f1}}
\label{tabelaF1k}
\end{figure}

\begin{figure}[hbt]
\centering
\includegraphics[width=14cm]{obrazki/f1k10k90.png}
\caption{Wykres dla wartości k = 10 (lewy) oraz dla wartości k = 90 (prawy) dla aproksymacji funkcji \ref{f1}}
\label{f1k10k90}
\end{figure}

\begin{figure}[hbt]
\centering
\includegraphics[width=14cm]{obrazki/tabelaF2k.png}
\caption{Tabela wartości k i miar jakości dla aproksymacji funkcji \ref{f2}}
\label{tabelaF2k}
\end{figure}

\begin{figure}[hbt]
\centering
\includegraphics[width=14cm]{obrazki/f2k10k90.png}
\caption{Wykres dla wartości k = 10 (lewy) oraz dla wartości k = 90 (prawy) dla aproksymacji funkcji \ref{f2}}
\label{f2k10k90}
\end{figure}

\begin{figure}[hbt]
\centering
\includegraphics[width=14cm]{obrazki/metodaWyostrzania.png}
\caption{Tabela porównująca wartości miar jakości względem metody wysotrzania}
\label{metodaWyostrzania}
\end{figure}

\begin{figure}[hbt]
\centering
\includegraphics[width=14cm]{obrazki/metodaW.png}
\caption{Wykresy dla metod wysotrzania dla aproksymacji funkcji \ref{f1}}
\label{metodaW}
\end{figure}

\begin{figure}[hbt]
\centering
\includegraphics[width=14cm]{obrazki/krokWysotrzania.png}
\caption{Tabela porównująca wartości miar jakości względem kroku wyostrzania}
\label{krokWysotrzania}
\end{figure}

Poniżej przedstawiamy wyniki uzyskane z eksperymentów numerycznych przeprowadzonych przy użyciu zaimplementowanego przez nas programu do aproksymacji funkcji poprzez rozmyty system. Program ten jest oparty na metodologii opisanej w sekcji \ref{metod}.

Poniżej przedstawimy wyniki aproksymacji funkcji \ref{f1} oraz funkcji \ref{f2}. Parametry jakie możemy zmieniać to k - ilość zbiorów rozmytych jakimi pokrywamy dziedzinę oraz wartości początku i końca przedziału. Możemy też wybrać metodę tworzenia zbioru uczącego - generowanie losowe (wybierane zostają losowe punkty) lub sekwencyjne (wybieramy krok, co który maja być brane punkty). Dostępna jest również zmiana parametrów funkcji wyostrzającej - krok z jakim wyostrzanie będzie sekwencyjnie wykonywane oraz wybór metody wyostrzania. Jako wynik generowany jest plik z wartościami punktów  zaproksymowanej funkcji oraz wykres wizualizujący otrzymane przybliżenie funkcji. Jakość naszych wyników pomagają nam określić miary jakości, za jakie obraliśmy odchylenie medianowe (MAD) oraz odchylenie kwadratowe (MSD). Ponadto generujemy też wykres różnic z wykresem funkcji bazowej (czyli tej, którą aproksymujemy). Wykres z różnicami, jest zaprezentowany na rysunku \ref{f1k10r}. Wykres funkcji \ref{f1} oraz funkcji \ref{f2} możemy zobaczyć odpowiednio na rysunkach \ref{originalA} oraz \ref{originalB}. 
\par
Ideą, która nas skłaniają do zastosowania metodologii z sekcji \ref{metod}, było skonstruowanie jak najlepszego systemu aproksymującego funkcje.  Przeprowadziliśmy również wiele eksperymentów numerycznych w celu znalezienia najlepszych parametrów do aproksymacji. Jakość wyników mierzymy za pomocą miar jakości opisanych w podsekcji \ref{miary}, które traktujemy jako wskaźniki dokładności aproksymacji. Nasze badania rozpoczęliśmy od sprawdzenia wpływy liczby zbiorów rozmytych jakimi pokrywamy dziedzinę (parametr k) na jakość aproksymacji. Wyniki jakie otrzymaliśmy, znajdują się na rysunku z tabelą \ref{tabelaF1k} dla funkcji \ref{f1} oraz na rysunku \ref{tabelaF2k} dla funkcji~\ref{f2}. Jak widać na załączonych rysunkach, wraz ze wzrostem liczby k (ilość zbiorów rozmytych jakimi pokrywamy dziedzinę), maleją wartości wskaźników dokładności. Oznacza to, iż z wzrostem liczby k (zbiorów rozmytych) rośnie dokładność aproksymacji funkcji. Zachowanie taki dostrzegamy dla wykonanych aproksymacji dla obu funkcji. 
\par
Kolejnym wykonanym przez nas badaniem, było porównanie zaimplementowanych przez nas metod wyostrzania: COG (Center Of Gravity) z CAD (Center Avarge Defuzzification). Rezultaty jakie otrzymaliśmy zostały zaprezentowane na rysunku z tabelą \ref{metodaWyostrzania}, a wykresy dla aproksymacji z użyciem poszczególnych metod na rysunku \ref{metodaW}. Już na wykresie aproksymacji widać pewne różnice w przybliżaniu funkcji z użyciem tych dwóch metod wyostrzania. Przy porównaniu miar dokładności dla metody COG oraz CAD widać, ze lepsze efekty można uzyskać stosując metodę CAD - wszystkie miary jakość są dla niej mniejsze. Oznacza to, że aproksymacje wykonane z użyciem metody CAD są dokładniejsze. 
\par
W metodzie wyostrzania CAD możemy określić z jakim krokiem ma być wykonywane wyostrzanie. Jak widać w załączonym rysunku z tabelą \ref{krokWysotrzania}, im mniejsza wartość kroku, tym mniejsze miary dokładności otrzymujemy. Co oznacza dokładniejszą aproksymację. Jednakże, wartości wskaźników jakości nie maleją znacznie, z czego wynika, iż zmniejszanie kroku wyostrzania, nie daje znaczącej poprawy jakości aproksymacji, natomiast ma wpływ na wydajność aplikacji.
\subsection{Analiza otrzymanych wyników}   
Z uzyskanych wyników eksperymentów numerycznych przedstawionych w podsekcji Eksperymenty numeryczne wnioskujemy, iż na wyniki aproksymacji metodą generowania reguł rozmytych, duży wpływ ma liczba zbiorów rozmytych jakimi pokrywamy dziedzinę. Im większa jest ta liczba tym lepsze przybliżenie funkcji otrzymujemy. Sprawdziliśmy również, iż metoda wyostrzania CAD (Center Avarge Defuzzification), daje lepsze niż metoda CAD (Center Avarge Defuzzification), w naszym zagadnieniu. Krok z jakim dokonywaliśmy wyostrzania, również miał wpływ na jakość aproksymacji - im był mniejszy tym lepsze przybliżenie funkcji otrzymywaliśmy. Lecz nie była to znacząca poprawa dokładności. 
\par
Bardzo ważnym aspektem, który wynika z naszej analizy jest to, że dla obu funkcji przy różnych eksperymentach, wartości miar dokładności proporcjonalnie się zmieniały. Dowodzi to, że stworzony przez nas system jest uniwersalnym aproksymatorem. Można również wnioskować, iż dla innych funkcji nasz rozmyty system będzie osiągał podobne efekty. Oznacza to też, że znaleziony teraz jak najlepszy schemat ustawienia parametrów, będzie równie dobrze sprawdzał się dla innych funkcji rzeczywistych.  
     
\newpage
\section{Podsumowanie}
\label{konkluzje}
Powyższa praca pokazuje, iż metodą generowania reguł rozmytych, możemy stworzyć system rozmyty, który jest uniwersalnym aproksymatorem funkcji rzeczywistych. Uzyskane wyniki opisane w sekcji \ref{wyniki}, pokazują nam, jakie parametry można użyć aby otrzymane przez nas przybliżenie funkcji było jak najlepsze. Znaczące jest aby wybrać odpowiednią metodę wyostrzania - u nas najlepsze efekty uzyskaliśmy metodą CAD (Center Avarge Defuzzification). Duży wpływ na wyniki miała również liczba zbiorów rozmytych na jaką dzieliliśmy dziedzinę - im była większa tym lepsze wyniki otrzymywaliśmy. 
\par
Ważnym aspektem jest również to, iż używając takiego systemu rozmytego możemy aproksymować dowolną funkcję rzeczywistą, lecz też możemy go wykorzystywać do innych zastosowań (takich jak na przykład rozwiązywanie problemu pakownia samochodu, przybliżania szeregów czasowych, lokalizacji tablicy rejestracyjnej \cite{fengwang}). Co więcej, do skonstruowanego w ten sposób systemu reguł rozmytych można dodawać reguły lingwistyczne stworzone na przykład przez ekspertów. Powoduje to, ze możemy lepiej dostosować nasz rozmyty sterownik do zagadnienia, które chcemy nim rozwiązać, gdyż możemy skorzystać z każdej wiedzy o zagadnieniu jaką dysponujemy, nawet z poza danych uczących które mamy. 
\par
Można również zastanowić się nad polepszeniem metody generowania reguł rozmytych, tak aby uzyskać jeszcze lepsze wyniki przybliżeń. Ciekawe udoskonalenie metodologii zaproponowanej przez Wanga i Mendela (w pracy \cite{wang}), przedstawiono w pracy \cite{improve}. W pracy tej opisana jest ulepszona metoda generowania i wyboru reguł rozmytych do bazy reguł, która według autorów, przynosi bardzo dobre efekty.    
  

\newpage
\section{Bibliografia}

\begin{thebibliography}{9}
 
\bibitem{wang}
  Wang, L.X., Mendel, J.M.
  \emph{Generating Fuzzy Rules by Learning from Examples. IEEE Trans on Systems, Man, and Cybernetics}.
  22, 
  1992,
  1414-1427
  
\bibitem{rutk}
  Rutkowska, D., Pilinski, M. Rutkowski, L.
  \emph{Sieci neuronowe, algorytmy genetyczne i systemy rozmyte}.
  PWN, Warszawa 1997 \\
  Yan, J., Ryan, M., Power, J. Using Fuzzy Logic. Prentice Hall, London, 1994  
      
\bibitem{ross}
  Ross, T.J., Wiley, J.,  
  \emph{Fuzzy Logic with Engineering Applications}.
  John Wiley and Sons, 2004
  
\bibitem{rutkowski}
  Rutkowski, L.
  \emph{Metody i techniki sztucznej inteligencji}.
  PWN, Warszawa 2005  
  
\bibitem{makridakis}
  Makridakis, S., Wheelwright, S., Hyndman, R.
  \emph{Forecasting: Methods and Applications}.
  John Wiley and Sons, 1998   
  
\bibitem{improve}
  Casillas, J., Cordón, O., Herrera, F. 
  \emph{Improving the Wang and Mendel's fuzzy rule learning method by inducing cooperation among rules. Proceedings of the 8th Information Processing and Management of Uncertainty in Knowledge-Based Systems Conference}.
  2000, 1682-1688  
  
\bibitem{fengwang}
  F. Wang, L. Man, B. Wang, Y. Xiao, W. Pan, X, Lu
  \emph{Fuzzy-based algorithm for color recognition of licence plates}.
  Science Direct, February 2008
 
\end{thebibliography}

\end{document}
